read a integer grid from a ESRI BINARY file.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
character(len=*), | intent(in) | :: | fileName |
file to read |
||
type(grid_integer), | intent(out) | :: | layer |
returned grid float |
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
character(len=50), | public | :: | dummy | ||||
integer(kind=short), | public | :: | fileUnit | ||||
integer(kind=short), | public | :: | i | ||||
integer(kind=short), | public | :: | ios | ||||
integer(kind=short), | public | :: | j | ||||
integer(kind=short), | public | :: | recordLength | ||||
integer(kind=short), | public | :: | recordNumber |
SUBROUTINE NewGridIntegerFromESRI_BINARY & ! (fileName, layer) USE Utilities, ONLY: & !Imported routines: GetUnit IMPLICIT NONE !Arguments with intent(in): CHARACTER (LEN = *), INTENT(in) :: fileName !! file to read !Arguments with intent(out) TYPE (grid_integer), INTENT (OUT) :: layer !!returned grid float !Local variables: INTEGER (KIND = short) :: fileUnit INTEGER (KIND = short) :: ios CHARACTER (LEN = 50) :: dummy INTEGER (KIND = short) :: recordLength INTEGER (KIND = short) :: recordNumber INTEGER (KIND = short) :: i, j !------------end of declaration------------------------------------------------ !open file fileUnit = GetUnit () OPEN (UNIT = fileUnit, file = TRIM(fileName) // '.hdr', & STATUS = 'OLD', IOSTAT = ios) IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error opening file: ', & code = openFileError, argument = TRIM(fileName) // '.hdr' ) END IF !read number of columns READ (fileUnit,*,IOSTAT = ios) dummy, layer % jdim IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading columns in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !read number of rows READ (fileUnit,*,IOSTAT = ios) dummy, layer % idim IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading rows in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !read xll corner READ (fileUnit,*,IOSTAT = ios) dummy, layer % xllcorner IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading xll in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !read yll corner READ (fileUnit,*,IOSTAT = ios) dummy, layer % yllcorner IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading yll in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !read cellsize READ (fileUnit,*,IOSTAT = ios) dummy, layer % cellsize IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading cellsize in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !read nodata value READ (fileUnit,*,IOSTAT = ios) dummy, layer % nodata IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error reading missing value in file: ', & code = genericIOError, argument = TRIM(fileName) // '.hdr' ) END IF !allocate grid ALLOCATE ( layer % mat (layer % idim, layer % jdim), STAT = ios ) IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'memory allocation ', & code = memAllocError,argument = fileName ) ENDIF CLOSE (fileUnit) fileUnit = GetUnit () INQUIRE (IOLENGTH = recordLength) 100_long OPEN (UNIT = fileUnit, file = TRIM(fileName) // '.flt', & FORM = 'UNFORMATTED', ACCESS = 'DIRECT', RECL = recordLength, & STATUS = 'OLD', IOSTAT = ios) IF (ios /= 0) THEN CALL Catch ('error', 'GridLib', & 'error opening file: ', & code = openFileError, argument = TRIM(fileName) // '.flt' ) END IF !read data recordNumber = 0 DO i = 1,layer % idim DO j = 1, layer % jdim recordNumber = recordNumber + 1 READ (fileUnit,REC = recordNumber) layer % mat (i,j) END DO END DO CLOSE (fileUnit) !Set other fields to default layer % standard_name = '' layer % long_name = '' layer % units = '' layer % varying_mode = 'sequence' layer % valid_min = layer % nodata layer % valid_max = layer % nodata layer % esri_pe_string = '' layer % reference_time = timeDefault layer % current_time = timeDefault layer % next_time = timeDefault END SUBROUTINE NewGridIntegerFromESRI_BINARY